package user;
//使用User类来表示用户

import Operation.IOperation;

/**
 * +----------+-------------+------+-----+---------+----------------+
 * | Field    | Type        | Null | Key | Default | Extra          |
 * +----------+-------------+------+-----+---------+----------------+
 * | userId   | int(11)     | NO   | PRI | NULL    | auto_increment |
 * | userName | varchar(20) | YES  |     | NULL    |                |
 * | password | varchar(20) | YES  |     | NULL    |                |
 * | isAdmin  | int(11)     | YES  |     | NULL    |                |
 * +----------+-------------+------+-----+---------+----------------+
 */
//针对此处的isAdmin，并不是直接使用boolean来进行区分，而是使用两个不同子类来区分
//    原因是,管理员和普通用户,支持的方法是不一样的
abstract public class User {
    private int userId;
    private String userName;
    private String password;

    //包含了一个数组,数组里面就是支持用户(管理员)的操作
    protected IOperation[] operations;

    //普通用户和管理员看到的菜单也不一样,需要用到多态来实现
    abstract public int menu();//抽象方法无法具体实现
    //而抽象类不能杯实例化,只能被继承

    //根据用户的选择,来执行对应的操作.向上转型,父类引用于子类,如果是对普通方法进行调用,那么调用的则是父类的方法.
    public void doOperation(int choice){
        operations[choice].work();
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }



    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
